#!/usr/bin/perl
##########################################################################################################################
##### a script to clean the db of orphaned entries
##########################################################################################################################

##########################################################################################################################
######  TODO list  #######################################################################################################
##########################################################################################################################
##########################################################################################################################

##########################################################################################################################
###### Bug list
##########################################################################################################################
##########################################################################################################################

##########################################################################################################################
# Includes
##########################################################################################################################

use lib qw(../cgi-bin);
use Time::Local qw(timelocal);
use CGI;
use Carp;

use WiganRL;
use Diva::DB;
use Diva::DataObject;
use WiganRL::DataObject;
use WiganRL::DataObject::View;
use WiganRL::DataObject::Viewtopic;
use WiganRL::Search;

use Getopt::Long;
use File::Glob;
use File::Basename;

use strict;
#use warnings;

$|++;  #unbuffered

##########################################################################################################################
# get arguments
##########################################################################################################################

##########################################################################################################################
# site setup and location variable declarations
##########################################################################################################################
my $cfg= WiganRL::DataObject->load_config('../cgi-bin/wiganrl.ini');

my $cgi= CGI->new();

my $dbh= Diva::DB->new();
$dbh->set( {
	DATABASE_NAME       => $cfg->val('database', 'DATABASE_NAME'),
	DATABASE_SERVER     => $cfg->val('database', 'DATABASE_SERVER'),
	DATABASE_USERNAME   => $cfg->val('database', 'DATABASE_USERNAME'),
	DATABASE_PASSWORD   => $cfg->val('database', 'DATABASE_PASSWORD'),
	DATABASE_TYPE       => $cfg->val('database', 'DATABASE_TYPE'),
	} );
$dbh->connect();
$dbh->debug(0);
WiganRL::DataObject->dbh($dbh);
WiganRL::Search->dbh($dbh);
WiganRL::DataObject->init_class('WWCOM');  #loads contenttypes
WiganRL::DataObject->cgi($cgi);

my %tables;
my ($sth,$rv)= $dbh->get(['CONTENT_TYPE'],['PK_CONTENTTYPE_ID','CONTENTTYPE_NAME']);
while (my $res= $sth->fetchrow_arrayref) {
	if ($res->[1] ne 'USER_CONTENT') {
		$tables{$res->[0]}= $res->[1];
	}
}
$sth->finish;

($sth,$rv)= $dbh->get(['OBJECT'],['PK_OBJECT_ID','FK_CONTENTTYPE_ID']);
while (my $res= $sth->fetchrow_arrayref) {
	if ($tables{$res->[1]} eq '') {
		next;
	}
	my ($sthr,$rvr)= $dbh->get([$tables{$res->[1]}],['FK_OBJECT_ID'],'','FK_OBJECT_ID='.$res->[0]);
	$sthr->finish;
	if ($rvr == 0) {
		$dbh->dbdelete('OBJECT','PK_OBJECT_ID='.$res->[0]);
		print "Deleted Orphan OBJECT record: $res->[0]\n";
	}
}
$sth->finish;